// let obj = {
//     name:"xiaoli",
//     age:12,
//     gender:undefined
// }
// let {name,age,gender='male'} = obj
// console.log(name,age,gender)

// age = 12
// console.log(age)

// let [a,b,c] = 'today'
// let {length:len} = 'today'
// console.log(len)

// let {valueOf} = true
// console.log(valueOf)
// var name = "znn"
// var obj = {
//     name,
//     foo() {
//         console.log("my name is "+name)
//     },
// }
// obj.foo()

// console.log(Object)
// let arr = new Array(3);
// arr.fill({name:'larry'});
// console.log(arr); // [ { name: 'larry' }, { name: 'larry' }, { name: 'larry' } ]
// arr[0].name = 'tom';
// console.log(arr); // [ { name: 'tom' }, { name: 'tom' }, { name: 'tom' } ]


// let [a,b,c=1] = [1,2]
// console.log(a,b,c)


// let set = new Set([1,2,3,4])
// set.forEach((item) => {
//     console.log(item)
// })

// function foo() {
//     let set = new Set(arguments)
//     console.log(set)
// }
// foo(1,2)

// let map = new Map([['name','tom'],['age','12']])
// map.forEach((index,item1) => {
//     console.log(index,item1)
// })
// console.log(map)
// 将Set集合转换为数组
// let set = new Set([1,2,3,4])
// let arr = [1,2,3,3,2,1]
// let res = Array.from(new Set(arr))
// console.log(res)
// function foo(arr) {
//     return Array.from(new Set(arr))
// }
// console.log(foo(arr))

// let res = Array.from(set)
// console.log(res)

// let obj = {
//     name:'tom',
//     age:5,
//     gender:'male'
// }
// let res = Object.entries(obj)  //拿到对象中键值对
// let map = new Map(res)  //作为参数传给Map
// console.log(map)

// let arr = [1,2,3]
// let iterator = arr.values()
// console.log(iterator.next())
// console.log(iterator.next())
// console.log(iterator.next())
// console.log(iterator.next())

// console.log(String.prototype[Symbol.iterator])
// console.log(''[Symbol.iterator])

// let arr_like = {
//     "0":"xpf",
//     "1":"25",
//     "2":"male",
//     length:3,
//     [Symbol.iterator]:[][Symbol.iterator]
// }
// let obj = {
//     name:"xiaoli",
//     age:12,
//     [Symbol.iterator]:[][Symbol.iterator]
// }
// console.log(obj)
// for(let item of arr_like) {
//     console.log(item)
// }
// var arr  = [1,2,3]
// let set = new Set([1,2,3,4,5])
// let map = new Map([['name','tom']])
// for(let res of map) {
//     console.log(res)
// }

// let obj = {
//     name:'xpf',
//     age:25,
//     gender:'male',
//     length:3,
//     [Symbol.iterator]:[][Symbol.iterator]
// }
// for(let val of obj){
//     console.log(val); // undefined undefined undefined
// }
// function Person(name,age) {
//     this.name = name;
//     this.age = age;
// }
// Person.prototype.pay = function() {
//     console.log("my name is "+this.name)
// }
// var per1 = new Person('tom',12)
// console.log(per1)
// per1.pay()


// function Person1(name) {
//     this.name = name
// }
// Person1.prototype.pay = function() {
//     console.log("my name is "+this.name)
// }
// let per1 = new Person1('tom')
// // 子构造函数原型指向父构造函数的实例
// Person2.prototype = new Person1()
// Person2.prototype.constructor = Person2

// function Person2(name) {
//     this.name = name
// }
// let per2 = new Person2('jerry')
// per2.pay()

// class Person1 {
//     constructor(name) {
//         this.name = name;
//     }
//     pay() {
//         console.log('my name is '+this.name)
//     }
// }
// let per1 = new Person1('tom')

// class Person2 extends Person1{
//     constructor(name) {
//         super(name)
//     }
// }
// let per2 = new Person2('jerry')
// console.log(per2)
// per2.pay()

// let obj = {
//     name:'tom',
//     age:12
// }

// let symbol1 = Symbol('gender')
// obj[symbol1] = 'male'
// console.log(obj)
// console.log(obj.gender)

// let symbol2 = Symbol('age')
// obj[symbol2] = 13
// console.log(obj)

// console.log(Symbol(12) == Symbol(12))

// console.log(Object.getOwnPropertySymbols(obj));

// let symbol = Symbol('hello')
// console.log(symbol)

// // 创建一个symbol并把其放入全局注册表中，键为hello
// let s1 = Symbol.for('hello')
// // 从symbol注册表中取出键为hello的symbol
// let s2 = Symbol.for('hello')

// console.log(s1 == s2)  //true


// // 创建一个symbol，没有放入注册表中，key为hello
// let s1 = Symbol('hello')
// // 获取s1的键
// console.log(Symbol.keyFor(s1)) //undefined
// foo3()
// foo1()


// function foo2() {
//     console.log('foo2')
// }
// function foo1(foo2) {
//     setTimeout(() => {
//         console.log('foo1')
//         foo2()
//     },500)
// }
// foo1(foo2)

// let promise = new Promise((reslove,reject) => {
//     var math = Math.random()
//     if(math < 0.5) {
//         reslove(true)
//     } else {
//         reject(false)
//     }
// })
// console.log(promise)

// function * foo() {
//     yield 'hello';
//     yield 'world';
//     return 'ending'
// }
// var res = foo()
// console.log(res.next())
// console.log(res.next())
// console.log(res.next())


function Person1(name) {
    this.name = name
}
Person1.prototype.pay = function() {
    console.log("my name is "+this.name)
}
let per1 = new Person1('tom')
function Person2(name) {
    this.name = name
}
// 子构造函数原型指向父构造函数的实例
Person2.prototype = new Person1()
Person2.prototype.constructor = Person2


let per2 = new Person2('jerry')
per2.pay()
